package cn.net.Collection;
/*
        链表==普通方法+特有方法+稀有方法（查、增、删）
 */
import java.util.Arrays;
import java.util.LinkedList;//有序,有下标
/**测试链表*/
public class TestLinkedList {
    public static void main(String[] args) {
        LinkedList<String> list = new LinkedList();
        list.add("孙悟空");
        list.add("猪八戒");
        list.add("唐僧");
        list.add("沙悟净");
        list.add("白龙马");
        System.out.println(list);//[孙悟空, 猪八戒, 唐僧, 沙悟净, 白龙马]
        //3.1自行测试从collection继承过来的共性方法测试
//        list.clear();
//        System.out.println(list);

        System.out.println(list.contains("白龙马"));//true
        System.out.println(list.size());//5
        System.out.println(list.isEmpty());//false
        System.out.println(list.hashCode());
        System.out.println(list.get(1));//获取下标为1的元素：猪八戒
        System.out.println(list.set(4,"红孩儿"));//4---白龙马
        System.out.println(list);//覆盖重置元素值[孙悟空, 猪八戒, 唐僧, 沙悟净, 红孩儿]
        System.out.println(list.remove(4));//移除下标为4的元素:红孩儿-----------remove(下标值)
        System.out.println(list);//[孙悟空, 猪八戒, 唐僧, 沙悟净]
        System.out.println(Arrays.toString(list.toArray()));

        System.out.println(list.indexOf(1));//indexOf(下标值)默认都返回-1
        System.out.println(list.lastIndexOf("孙悟空"));//indexOf(元素值)；该元素对应的下标值为0

        System.out.println("----------//3.2 LinkedList特有方法测试------------------");
        //添加方法必须单独一行
        /*增加+获取+删除*/
        list.addFirst("白骨精");//添加表头元素（首元素）
        list.addLast("狐狸精");//添加表尾元素（尾元素）
        System.out.println(list);//添加后进行打印显示[白骨精, 孙悟空, 猪八戒, 唐僧, 沙悟净, 狐狸精]

        System.out.println(list.getFirst());////获取首元素:白骨精
        System.out.println(list.getLast());////获取尾元素:狐狸精

        System.out.println(list.removeFirst());////移除首元素
        System.out.println(list);
        System.out.println(list.removeLast());///移除尾元素
        System.out.println(list);

        System.out.println("----------其他特有方法的测试-----------------------");

        LinkedList<String> list2 = new LinkedList();
        //添加数据
        list2.add("水浒传");
        list2.add("三国演义");
        list2.add("西游记");
        list2.add("红楼梦");
        System.out.println(list2);//[水浒传, 三国演义, 西游记, 红楼梦]
        /*1.查询----显示*/  //element()==peek()==peekFirst()
        System.out.println(list2.element());//【获取但不移除】此列表的首元素(第一个元素):水浒传
        System.out.println(list2.peek());//【获取但不移除】此列表的首元素(第一个元素):水浒传
        System.out.println(list2.peekFirst());//【获取但不移除】此列表的首元素(第一个元素):水浒传
        System.out.println(list2.peekLast());//【获取但不移除】此列表的尾元素(最后一个元素):红楼梦
        /*2.新增/添加/插入----true*/
        System.out.println(list2.offer("斗罗大陆"));//true//默认将指定元素添加到【列表末尾】即表尾
        System.out.println(list2.offerFirst("斗破苍穹"));//true
        System.out.println(list2.offerLast("逆天邪神"));//true
        System.out.println(list2);//[斗破苍穹, 水浒传, 三国演义, 西游记, 红楼梦, 斗罗大陆, 逆天邪神]
        /*3.删除移除*/
        System.out.println(list2.poll());//斗破苍穹//【获取并且移除】此列表的首元素(第一个元素)
        System.out.println(list2.pollFirst());//水浒传//【获取并且移除】此列表的首元素(第一个元素)
        System.out.println(list2.pollLast());//逆天邪神//【获取并且移除】此列表的【尾元素(最后一个元素)】
        System.out.println(list2);//[三国演义, 西游记, 红楼梦, 斗罗大陆]
        System.out.println();






    }
}
